package com.reactim.message.routing;

import reactor.core.publisher.Mono;

/**
 * 消息路由服务接口
 * 负责在分布式环境中路由消息到正确的服务实例
 */
public interface MessageRoutingService {
    
    /**
     * 发布跨实例消息
     * 
     * @param targetInstanceId 目标实例ID
     * @param userId 用户ID
     * @param route 消息路由
     * @param data 消息数据
     * @return 发送结果
     */
    <T> Mono<Boolean> publishCrossInstanceMessage(String targetInstanceId, Long userId, String route, T data);
    
    /**
     * 订阅跨实例消息
     * 当接收到其他实例发送的消息时，会调用此方法处理
     */
    void subscribeCrossInstanceMessages();
    
    /**
     * 停止消息订阅
     */
    void stopSubscription();
    
    /**
     * 检查消息路由服务是否可用
     * 
     * @return 是否可用
     */
    Mono<Boolean> isAvailable();
}